<?php

namespace Maka\Tool\Idownload;

use think\Db;

class Drive
{
    public function output($file_info)
    {
        $file = $file_info['file'];
        $file_name = $file_info['file_name'];
        // set_time_limit(0);

        if (file_exists($file) && is_file($file)) {
            $filesize = filesize($file);
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Transfer-Encoding: binary');
            header('Accept-Ranges: bytes');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . $filesize);
            header('Content-Disposition: attachment; filename=' . $file_name);

            // 打开文件
            $fp = fopen($file, 'rb');
            // 设置指针位置
            fseek($fp, 0);

            // 开启缓冲区
            ob_start();
            // 分段读取文件
            while (!feof($fp)) {
                $chunk_size = 1024 * 1024 * 2; // 2MB
                echo fread($fp, $chunk_size);
                ob_flush(); // 刷新PHP缓冲区到Web服务器
                flush(); // 刷新Web服务器缓冲区到浏览器
            }
            // 关闭缓冲区
            ob_end_clean();
            fclose($fp);
        } else {
            echo 'file not exists or has been removed!';
        }

        exit();
    }


    // 创建一个下载链接
    // public function createlink(string $file, string $file_name)
    // {
    //     if (is_file($file)) {
    //         $time = time();
    //         $key = md5($file_name . $file . $time);

    //         $is_has = Db::table('download_link')->where('key', $key)->find();
    //         if ($is_has) {
    //             return getConf('codeshop_domain') . '/download/index?key=' . $key;
    //         }

    //         $link = Db::table('download_link')->insert([
    //             'key' => $key,
    //             'file' => $file,
    //             'file_name' => $file_name,
    //             'create_time' => $time,
    //             'expiration_time' => $time + (3600 * 24),
    //         ]);

    //         if ($link) {
    //             return getConf('codeshop_domain') . '/download/index?key=' . $key;;
    //         } else {
    //             throw new \Exception("createlink 创建失败", 1);
    //         }
    //     } else {
    //         throw new \Exception('$file 必须是个文件');
    //     }
    // }


    /**
     * 用 key 查找有效链接
     *
     * @param  string $key 关键字
     * @return array|string|null
     */
    // public function selectlink($key)
    // {
    //     $link = Db::table('download_link')->where('key', $key)->field('file,file_name,expiration_time')->find();

    //     // 不存在的
    //     if (!$link) {
    //         return null;
    //     }

    //     if ($link['expiration_time'] < time()) {
    //         return 'expired'; // 过期的 失效的
    //     }

    //     return [
    //         'file' => $link['file'],
    //         'file_name' => $link['file_name']
    //     ];
    // }
}
